package cn.geekyspace.scanhive.infrastructure.ui;

import javafx.application.Platform;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * UI日志组件
 */
@Data
@Slf4j
@Component
@RequiredArgsConstructor
public class UILogger {

    private Label logLabel;   // 日志标签

    // 日志级别枚举，绑定对应颜色
    @Getter
    @AllArgsConstructor
    public enum LogLevel {
        INFO(Color.BLACK),
        DEBUG(Color.GRAY),
        WARN(Color.ORANGE),
        SUCCESS(Color.GREEN),
        ERROR(Color.RED);

        private final Color color;
    }

    /** info日志（黑色） */
    public void info(String message) { logWithLevel(LogLevel.INFO, message); }

    /** debug日志（灰色） */
    public void debug(String message) { logWithLevel(LogLevel.DEBUG, message); }

    /** 警告日志（橙色） */
    public void warn(String message) { logWithLevel(LogLevel.WARN, message); }

    /** 成功日志（绿色） */
    public void success(String message) { logWithLevel(LogLevel.SUCCESS, message); }

    /** 错误日志（红色） */
    public void error(String message) { logWithLevel(LogLevel.ERROR, message); }

    /** 通用日志方法，处理控制台和UI */
    private void logWithLevel(LogLevel level, String message) {
        switch (level) {
            case INFO -> log.info("[INFO] " + message);
            case DEBUG -> log.debug("[DEBUG] " + message);
            case WARN -> log.warn("[WARN] " + message);
            case SUCCESS -> log.info("[SUCCESS] " + message);
            case ERROR -> log.error("[ERROR] " + message);
        }

        if (logLabel != null) {
            Platform.runLater(() -> {
                logLabel.setText(message);
                logLabel.setTextFill(level.getColor());
            });
        } else {
            log.warn("logLabel 未注入，无法更新UI日志");
        }
    }

}